﻿#include "KeyboardInfo.h"

typedef struct _HID_KEYBOARD_INFO
{
    uint8_t nUsageID;                       // Usage ID
    LPCTSTR lpUsageName;                    // Usage Name1
    LPCTSTR lpUsageName2;                   // Usage Name2
}HID_KEYBOARD_INFO;

#define AddHidKeyboard(VK, VKName1, VKName2)   {(VK), (VKName1), (VKName2)}

static HID_KEYBOARD_INFO g_HidKeyInfos[] =
{
    AddHidKeyboard(0x00, _T("Reserved"), _T("")),
    AddHidKeyboard(0x01, _T("ErrorRollOver"), _T("")),
    AddHidKeyboard(0x02, _T("POSTFail"), _T("")),
    AddHidKeyboard(0x03, _T("ErrorUndefined"), _T("")),
    AddHidKeyboard(0x04, _T("a"), _T("A")),
    AddHidKeyboard(0x05, _T("b"), _T("B")),
    AddHidKeyboard(0x06, _T("c"), _T("C")),
    AddHidKeyboard(0x07, _T("d"), _T("D")),
    AddHidKeyboard(0x08, _T("e"), _T("E")),
    AddHidKeyboard(0x09, _T("f"), _T("F")),
    AddHidKeyboard(0x0A, _T("g"), _T("G")),
    AddHidKeyboard(0x0B, _T("h"), _T("H")),
    AddHidKeyboard(0x0C, _T("i"), _T("I")),
    AddHidKeyboard(0x0D, _T("j"), _T("J")),
    AddHidKeyboard(0x0E, _T("k"), _T("K")),
    AddHidKeyboard(0x0F, _T("l"), _T("L")),
    AddHidKeyboard(0x10, _T("m"), _T("M")),
    AddHidKeyboard(0x11, _T("n"), _T("N")),
    AddHidKeyboard(0x12, _T("o"), _T("O")),
    AddHidKeyboard(0x13, _T("p"), _T("P")),
    AddHidKeyboard(0x14, _T("q"), _T("Q")),
    AddHidKeyboard(0x15, _T("r"), _T("R")),
    AddHidKeyboard(0x16, _T("s"), _T("S")),
    AddHidKeyboard(0x17, _T("t"), _T("T")),
    AddHidKeyboard(0x18, _T("u"), _T("U")),
    AddHidKeyboard(0x19, _T("v"), _T("V")),
    AddHidKeyboard(0x1A, _T("w"), _T("W")),
    AddHidKeyboard(0x1B, _T("x"), _T("X")),
    AddHidKeyboard(0x1C, _T("y"), _T("Y")),
    AddHidKeyboard(0x1D, _T("z"), _T("Z")),
    AddHidKeyboard(0x1E, _T("1"), _T("!")),
    AddHidKeyboard(0x1F, _T("2"), _T("@")),
    AddHidKeyboard(0x20, _T("3"), _T("#")),
    AddHidKeyboard(0x21, _T("4"), _T("$")),
    AddHidKeyboard(0x22, _T("5"), _T("%")),
    AddHidKeyboard(0x23, _T("6"), _T("^")),
    AddHidKeyboard(0x24, _T("7"), _T("&")),
    AddHidKeyboard(0x25, _T("8"), _T("*")),
    AddHidKeyboard(0x26, _T("9"), _T("(")),
    AddHidKeyboard(0x27, _T("0"), _T(")")),
    AddHidKeyboard(0x28, _T("Enter"), _T("")),
    AddHidKeyboard(0x29, _T("Esc"), _T("")),
    AddHidKeyboard(0x2A, _T("Backspace"), _T("")),
    AddHidKeyboard(0x2B, _T("Tab"), _T("")),
    AddHidKeyboard(0x2C, _T("Spacebar"), _T("")),
    AddHidKeyboard(0x2D, _T("-"), _T("_")),
    AddHidKeyboard(0x2E, _T("="), _T("+")),
    AddHidKeyboard(0x2F, _T("["), _T("{")),
    AddHidKeyboard(0x30, _T("]"), _T("}")),
    AddHidKeyboard(0x31, _T("\\"), _T("|")),
    AddHidKeyboard(0x32, _T("Non-US#\\"), _T("")),
    AddHidKeyboard(0x33, _T(";"), _T(":")),
    AddHidKeyboard(0x34, _T("'"), _T("\"")),
    AddHidKeyboard(0x35, _T("`"), _T("~")),
    AddHidKeyboard(0x36, _T(","), _T("<")),
    AddHidKeyboard(0x37, _T("."), _T(">")),
    AddHidKeyboard(0x38, _T("/"), _T("?")),
    AddHidKeyboard(0x39, _T("Caps Lock"), _T("")),
    AddHidKeyboard(0x3A, _T("F1"), _T("F1")),
    AddHidKeyboard(0x3B, _T("F2"), _T("F2")),
    AddHidKeyboard(0x3C, _T("F3"), _T("F3")),
    AddHidKeyboard(0x3D, _T("F4"), _T("F4")),
    AddHidKeyboard(0x3E, _T("F5"), _T("F5")),
    AddHidKeyboard(0x3F, _T("F6"), _T("F6")),
    AddHidKeyboard(0x40, _T("F7"), _T("F7")),
    AddHidKeyboard(0x41, _T("F8"), _T("F8")),
    AddHidKeyboard(0x42, _T("F9"), _T("F9")),
    AddHidKeyboard(0x43, _T("F10"), _T("F10")),
    AddHidKeyboard(0x44, _T("F11"), _T("F11")),
    AddHidKeyboard(0x45, _T("F12"), _T("F12")),
    AddHidKeyboard(0x46, _T("PrintScreen"), _T("")),
    AddHidKeyboard(0x47, _T("Scroll Lock"), _T("")),
    AddHidKeyboard(0x48, _T("Pause"), _T("")),
    AddHidKeyboard(0x49, _T("Insert"), _T("")),
    AddHidKeyboard(0x4A, _T("Home"), _T("")),
    AddHidKeyboard(0x4B, _T("Page Up"), _T("")),
    AddHidKeyboard(0x4C, _T("Delete Forward"), _T("")),
    AddHidKeyboard(0x4D, _T("End"), _T("")),
    AddHidKeyboard(0x4E, _T("Page Down"), _T("")),
    AddHidKeyboard(0x4F, _T("Right Arrow"), _T("")),
    AddHidKeyboard(0x50, _T("Left Arrow"), _T("")),
    AddHidKeyboard(0x51, _T("Down Arrow"), _T("")),
    AddHidKeyboard(0x52, _T("Up Arrow"), _T("")),
    AddHidKeyboard(0x53, _T("Num Lock"), _T("Clear")),
    AddHidKeyboard(0x54, _T("/"), _T("")),
    AddHidKeyboard(0x55, _T("*"), _T("")),
    AddHidKeyboard(0x56, _T("-"), _T("")),
    AddHidKeyboard(0x57, _T("+"), _T("")),
    AddHidKeyboard(0x58, _T("Enter"), _T("")),
    AddHidKeyboard(0x59, _T("1"), _T("End")),
    AddHidKeyboard(0x5A, _T("2"), _T("Down Arrow")),
    AddHidKeyboard(0x5B, _T("3"), _T("Page Dn")),
    AddHidKeyboard(0x5C, _T("4"), _T("Left Arrow")),
    AddHidKeyboard(0x5D, _T("5"), _T("")),
    AddHidKeyboard(0x5E, _T("6"), _T("Right Arrow")),
    AddHidKeyboard(0x5F, _T("7"), _T("Home")),
    AddHidKeyboard(0x60, _T("8"), _T("Up Arrow")),
    AddHidKeyboard(0x61, _T("9"), _T("Page Up")),
    AddHidKeyboard(0x62, _T("0"), _T("Insert")),
    AddHidKeyboard(0x63, _T("."), _T("Delete")),
    AddHidKeyboard(0x64, _T("Non-US\\"), _T("|")),
    AddHidKeyboard(0x65, _T("Application"), _T("")),
    AddHidKeyboard(0x66, _T("Power"), _T("")),
    AddHidKeyboard(0x67, _T("="), _T("")),
    AddHidKeyboard(0x68, _T("F13"), _T("F13")),
    AddHidKeyboard(0x69, _T("F14"), _T("F14")),
    AddHidKeyboard(0x6A, _T("F15"), _T("F15")),
    AddHidKeyboard(0x6B, _T("F16"), _T("F16")),
    AddHidKeyboard(0x6C, _T("F17"), _T("F17")),
    AddHidKeyboard(0x6D, _T("F18"), _T("F18")),
    AddHidKeyboard(0x6E, _T("F19"), _T("F19")),
    AddHidKeyboard(0x6F, _T("F20"), _T("F20")),
    AddHidKeyboard(0x70, _T("F21"), _T("F21")),
    AddHidKeyboard(0x71, _T("F22"), _T("F22")),
    AddHidKeyboard(0x72, _T("F23"), _T("F23")),
    AddHidKeyboard(0x73, _T("F24"), _T("F24")),
    AddHidKeyboard(0x74, _T("Execute"), _T("")),
    AddHidKeyboard(0x75, _T("Help"), _T("")),
    AddHidKeyboard(0x76, _T("Menu"), _T("")),
    AddHidKeyboard(0x77, _T("Select"), _T("")),
    AddHidKeyboard(0x78, _T("Stop"), _T("")),
    AddHidKeyboard(0x79, _T("Again"), _T("")),
    AddHidKeyboard(0x7A, _T("Undo"), _T("")),
    AddHidKeyboard(0x7B, _T("Cut"), _T("")),
    AddHidKeyboard(0x7C, _T("Copy"), _T("")),
    AddHidKeyboard(0x7D, _T("Paste"), _T("")),
    AddHidKeyboard(0x7E, _T("Find"), _T("")),
    AddHidKeyboard(0x7F, _T("Mute"), _T("")),
    AddHidKeyboard(0x80, _T("Volume Up"), _T("")),
    AddHidKeyboard(0x81, _T("Volume Down"), _T("")),
    AddHidKeyboard(0x82, _T("Locking Caps Lock"), _T("")),
    AddHidKeyboard(0x83, _T("Locking Num Lock"), _T("")),
    AddHidKeyboard(0x84, _T("Locking Scroll Lock"), _T("")),
    AddHidKeyboard(0x85, _T("Comma"), _T("")),
    AddHidKeyboard(0x86, _T("Equal Sign"), _T("")),
    AddHidKeyboard(0x87, _T("Internationall"), _T("")),
    AddHidKeyboard(0x88, _T("International2"), _T("")),
    AddHidKeyboard(0x89, _T("International3"), _T("")),
    AddHidKeyboard(0x8A, _T("International4"), _T("")),
    AddHidKeyboard(0x8B, _T("International5"), _T("")),
    AddHidKeyboard(0x8C, _T("International6"), _T("")),
    AddHidKeyboard(0x8D, _T("International7"), _T("")),
    AddHidKeyboard(0x8E, _T("International8"), _T("")),
    AddHidKeyboard(0x8F, _T("International9"), _T("")),
    AddHidKeyboard(0x90, _T("LANG1"), _T("")),
    AddHidKeyboard(0x91, _T("LANG2"), _T("")),
    AddHidKeyboard(0x92, _T("LANG3"), _T("")),
    AddHidKeyboard(0x93, _T("LANG4"), _T("")),
    AddHidKeyboard(0x94, _T("LANG5"), _T("")),
    AddHidKeyboard(0x95, _T("LANG6"), _T("")),
    AddHidKeyboard(0x96, _T("LANG7"), _T("")),
    AddHidKeyboard(0x97, _T("LANG8"), _T("")),
    AddHidKeyboard(0x98, _T("LANG9"), _T("")),
    AddHidKeyboard(0x99, _T("Alternate Erase"), _T("")),
    AddHidKeyboard(0x9A, _T("SysReq/Attention"), _T("")),
    AddHidKeyboard(0x9B, _T("Cancel"), _T("")),
    AddHidKeyboard(0x9C, _T("Clear"), _T("")),
    AddHidKeyboard(0x9D, _T("Prior"), _T("")),
    AddHidKeyboard(0x9E, _T("Return"), _T("")),
    AddHidKeyboard(0x9F, _T("Separator"), _T("")),
    AddHidKeyboard(0xA0, _T("Out"), _T("")),
    AddHidKeyboard(0xA1, _T("Oper"), _T("")),
    AddHidKeyboard(0xA2, _T("Clear/Again"), _T("")),
    AddHidKeyboard(0xA3, _T("CrSel/Props"), _T("")),
    AddHidKeyboard(0xA4, _T("ExSel"), _T("")),
    AddHidKeyboard(0xA5, _T("Reserved"), _T("")),
    AddHidKeyboard(0xA6, _T("Reserved"), _T("")),
    AddHidKeyboard(0xA7, _T("Reserved"), _T("")),
    AddHidKeyboard(0xA8, _T("Reserved"), _T("")),
    AddHidKeyboard(0xA9, _T("Reserved"), _T("")),
    AddHidKeyboard(0xAA, _T("Reserved"), _T("")),
    AddHidKeyboard(0xAB, _T("Reserved"), _T("")),
    AddHidKeyboard(0xAC, _T("Reserved"), _T("")),
    AddHidKeyboard(0xAD, _T("Reserved"), _T("")),
    AddHidKeyboard(0xAE, _T("Reserved"), _T("")),
    AddHidKeyboard(0xAF, _T("Reserved"), _T("")),
    AddHidKeyboard(0xB0, _T("00"), _T("")),
    AddHidKeyboard(0xB1, _T("000"), _T("")),
    AddHidKeyboard(0xB2, _T("Thousands Separator"), _T("")),
    AddHidKeyboard(0xB3, _T("Decimal Separator"), _T("")),
    AddHidKeyboard(0xB4, _T("Currency Unit"), _T("")),
    AddHidKeyboard(0xB5, _T("Currency Sub-unit"), _T("")),
    AddHidKeyboard(0xB6, _T("("), _T("")),
    AddHidKeyboard(0xB7, _T(")"), _T("")),
    AddHidKeyboard(0xB8, _T("{"), _T("")),
    AddHidKeyboard(0xB9, _T("}"), _T("")),
    AddHidKeyboard(0xBA, _T("Tab"), _T("")),
    AddHidKeyboard(0xBB, _T("Backspace"), _T("")),
    AddHidKeyboard(0xBC, _T("A"), _T("")),
    AddHidKeyboard(0xBD, _T("B"), _T("")),
    AddHidKeyboard(0xBE, _T("C"), _T("")),
    AddHidKeyboard(0xBF, _T("D"), _T("")),
    AddHidKeyboard(0xC0, _T("E"), _T("")),
    AddHidKeyboard(0xC1, _T("F"), _T("")),
    AddHidKeyboard(0xC2, _T("XOR"), _T("")),
    AddHidKeyboard(0xC3, _T("^"), _T("")),
    AddHidKeyboard(0xC4, _T("%"), _T("")),
    AddHidKeyboard(0xC5, _T("<"), _T("")),
    AddHidKeyboard(0xC6, _T(">"), _T("")),
    AddHidKeyboard(0xC7, _T("&"), _T("")),
    AddHidKeyboard(0xC8, _T("&&"), _T("")),
    AddHidKeyboard(0xC9, _T("|"), _T("")),
    AddHidKeyboard(0xCA, _T("||"), _T("")),
    AddHidKeyboard(0xCB, _T(":"), _T("")),
    AddHidKeyboard(0xCC, _T("#"), _T("")),
    AddHidKeyboard(0xCD, _T("Space"), _T("")),
    AddHidKeyboard(0xCE, _T("@"), _T("")),
    AddHidKeyboard(0xCF, _T("!"), _T("")),
    AddHidKeyboard(0xD0, _T("Memory Store"), _T("")),
    AddHidKeyboard(0xD1, _T("Memory Recall"), _T("")),
    AddHidKeyboard(0xD2, _T("Memory Clear"), _T("")),
    AddHidKeyboard(0xD3, _T("Memory Add"), _T("")),
    AddHidKeyboard(0xD4, _T("Memory Subtract"), _T("")),
    AddHidKeyboard(0xD5, _T("Memory Multiply"), _T("")),
    AddHidKeyboard(0xD6, _T("Memory Divide"), _T("")),
    AddHidKeyboard(0xD7, _T("+/-"), _T("")),
    AddHidKeyboard(0xD8, _T("Clear"), _T("")),
    AddHidKeyboard(0xD9, _T("Clear Entry"), _T("")),
    AddHidKeyboard(0xDA, _T("Binary"), _T("")),
    AddHidKeyboard(0xDB, _T("Octal"), _T("")),
    AddHidKeyboard(0xDC, _T("Decimal "), _T("")),
    AddHidKeyboard(0xDD, _T("Hexadecimal "), _T("")),
    AddHidKeyboard(0xDE, _T("Reserved"), _T("")),
    AddHidKeyboard(0xDF, _T("Reserved"), _T("")),
    AddHidKeyboard(0xE0, _T("LeftControl"), _T("")),
    AddHidKeyboard(0xE1, _T("LeftShift"), _T("")),
    AddHidKeyboard(0xE2, _T("LeftAlt"), _T("")),
    AddHidKeyboard(0xE3, _T("LeftGui"), _T("")),
    AddHidKeyboard(0xE4, _T("RightControl"), _T("")),
    AddHidKeyboard(0xE5, _T("RightShift"), _T("")),
    AddHidKeyboard(0xE6, _T("RightAlt"), _T("")),
    AddHidKeyboard(0xE7, _T("RightGui"), _T("")),
    AddHidKeyboard(0xE8, _T("Reserved"), _T("")),
    AddHidKeyboard(0xE9, _T("Reserved"), _T("")),
    AddHidKeyboard(0xEA, _T("Reserved"), _T("")),
    AddHidKeyboard(0xEB, _T("Reserved"), _T("")),
    AddHidKeyboard(0xEC, _T("Reserved"), _T("")),
    AddHidKeyboard(0xED, _T("Reserved"), _T("")),
    AddHidKeyboard(0xEE, _T("Reserved"), _T("")),
    AddHidKeyboard(0xEF, _T("Reserved"), _T("")),
    AddHidKeyboard(0xF0, _T("Reserved"), _T("")),
    AddHidKeyboard(0xF1, _T("Reserved"), _T("")),
    AddHidKeyboard(0xF2, _T("Reserved"), _T("")),
    AddHidKeyboard(0xF3, _T("Reserved"), _T("")),
    AddHidKeyboard(0xF4, _T("Reserved"), _T("")),
    AddHidKeyboard(0xF5, _T("Reserved"), _T("")),
    AddHidKeyboard(0xF6, _T("Reserved"), _T("")),
    AddHidKeyboard(0xF7, _T("Reserved"), _T("")),
    AddHidKeyboard(0xF8, _T("Reserved"), _T("")),
    AddHidKeyboard(0xF9, _T("Reserved"), _T("")),
    AddHidKeyboard(0xFA, _T("Reserved"), _T("")),
    AddHidKeyboard(0xFB, _T("Reserved"), _T("")),
    AddHidKeyboard(0xFC, _T("Reserved"), _T("")),
    AddHidKeyboard(0xFD, _T("Reserved"), _T("")),
    AddHidKeyboard(0xFE, _T("Reserved"), _T("")),
    AddHidKeyboard(0xFF, _T("Reserved"), _T(""))
};

std::map<_tstring, KBDATA_INFO> g_KeyMap =
{
    { _T("Home"),           KBDATA_INFO(0x07, 0x00, 0, 0x4A)},
    { _T("Esc"),            KBDATA_INFO(0x1B, 0x01, 0, 0x29)},
    { _T("F1"),             KBDATA_INFO(0x70, 0x3B, 0, 0x3A)},
    { _T("F2"),             KBDATA_INFO(0x71, 0x3C, 0, 0x3B)},
    { _T("F3"),             KBDATA_INFO(0x72, 0x3D, 0, 0x3C)},
    { _T("F4"),             KBDATA_INFO(0x73, 0x3E, 0, 0x3D)},
    { _T("F5"),             KBDATA_INFO(0x74, 0x3F, 0, 0x3E)},
    { _T("F6"),             KBDATA_INFO(0x75, 0x40, 0, 0x3F)},
    { _T("F7"),             KBDATA_INFO(0x76, 0x41, 0, 0x40)},
    { _T("F8"),             KBDATA_INFO(0x77, 0x42, 0, 0x41)},
    { _T("F9"),             KBDATA_INFO(0x78, 0x43, 0, 0x42)},
    { _T("F10"),            KBDATA_INFO(0x79, 0x44, 0, 0x43)},
    { _T("F11"),            KBDATA_INFO(0x7A, 0x57, 0, 0x44)},
    { _T("F12"),            KBDATA_INFO(0x7B, 0x58, 0, 0x45)},
    { _T("F13"),            KBDATA_INFO(0x7C, 0x64, 0, 0x68)},
    { _T("F14"),            KBDATA_INFO(0x7D, 0x65, 0, 0x69)},
    { _T("F15"),            KBDATA_INFO(0x7E, 0x66, 0, 0x6A)},
    { _T("F16"),            KBDATA_INFO(0x7F, 0x67, 0, 0x6B)},
    { _T("F17"),            KBDATA_INFO(0x80, 0x68, 0, 0x6C)},
    { _T("F18"),            KBDATA_INFO(0x81, 0x69, 0, 0x6D)},
    { _T("F19"),            KBDATA_INFO(0x82, 0x6A, 0, 0x6E)},
    { _T("F20"),            KBDATA_INFO(0x83, 0x6B, 0, 0x6F)},
    { _T("F21"),            KBDATA_INFO(0x84, 0x6C, 0, 0x70)},
    { _T("F22"),            KBDATA_INFO(0x85, 0x6D, 0, 0x71)},
    { _T("F23"),            KBDATA_INFO(0x86, 0x6E, 0, 0x72)},
    { _T("F24"),            KBDATA_INFO(0x87, 0x76, 0, 0x73)},
    { _T("`"),              KBDATA_INFO(0xC0, 0x29, 0, 0x35)},
    { _T("1"),              KBDATA_INFO(0x31, 0x02, 0, 0x1E)},
    { _T("2"),              KBDATA_INFO(0x32, 0x03, 0, 0x1F)},
    { _T("3"),              KBDATA_INFO(0x33, 0x04, 0, 0x20)},
    { _T("4"),              KBDATA_INFO(0x34, 0x05, 0, 0x21)},
    { _T("5"),              KBDATA_INFO(0x35, 0x06, 0, 0x22)},
    { _T("6"),              KBDATA_INFO(0x36, 0x07, 0, 0x23)},
    { _T("7"),              KBDATA_INFO(0x37, 0x08, 0, 0x24)},
    { _T("8"),              KBDATA_INFO(0x38, 0x09, 0, 0x25)},
    { _T("9"),              KBDATA_INFO(0x39, 0x0A, 0, 0x26)},
    { _T("-"),              KBDATA_INFO(0xBD, 0x0C, 0, 0x2D)},
    { _T("="),              KBDATA_INFO(0xBB, 0x0D, 0, 0x2E)},
    { _T("Backspace"),      KBDATA_INFO(0x08, 0x0E, 0, 0x2A)},
    { _T("LCtrl"),          KBDATA_INFO(0xA2, 0x1D, 0, 0xE0)},
    { _T("LShift"),         KBDATA_INFO(0xA0, 0x2A, 0, 0xE1)},
    { _T("LAlt"),           KBDATA_INFO(0xA4, 0x38, 0, 0xE2)},
    { _T("LWin"),           KBDATA_INFO(0x5B, 0x5B, 1, 0xE3)},
    { _T("RCtrl"),          KBDATA_INFO(0xA3, 0x1D, 1, 0xE4)},
    { _T("RShift"),         KBDATA_INFO(0xA1, 0x36, 1, 0xE5)},
    { _T("RAlt"),           KBDATA_INFO(0xA5, 0x38, 1, 0xE6)},
    { _T("RWin"),           KBDATA_INFO(0x5C, 0x5C, 1, 0xE7)},
    { _T("Application"),    KBDATA_INFO(0x5D, 0x5D, 1, 0x65)},
    { _T("Tab"),            KBDATA_INFO(0x09, 0x0F, 0, 0x2B)},
    { _T("Space"),          KBDATA_INFO(0x20, 0x39, 0, 0x2C)},
    { _T("Enter"),          KBDATA_INFO(0x0D, 0x1C, 0, 0x28)},
    { _T("["),              KBDATA_INFO(0xDB, 0x1A, 0, 0x2F)},
    { _T("]"),              KBDATA_INFO(0xDD, 0x1B, 0, 0x30)},
    { _T("\\"),             KBDATA_INFO(0xDC, 0x2B, 0, 0x31)},
    { _T(";"),              KBDATA_INFO(0xBA, 0x27, 0, 0x33)},
    { _T("\'"),             KBDATA_INFO(0xDE, 0x28, 0, 0x34)},
    { _T(","),              KBDATA_INFO(0xBC, 0x33, 0, 0x36)},
    { _T("."),              KBDATA_INFO(0xBE, 0x34, 0, 0x37)},
    { _T("/"),              KBDATA_INFO(0xBF, 0x35, 0, 0x38)},
    { _T("A"),              KBDATA_INFO('A',  0x1E, 0, 0x04)},
    { _T("B"),              KBDATA_INFO('B',  0x30, 0, 0x05)},
    { _T("C"),              KBDATA_INFO('C',  0x2E, 0, 0x06)},
    { _T("D"),              KBDATA_INFO('D',  0x20, 0, 0x07)},
    { _T("E"),              KBDATA_INFO('E',  0x12, 0, 0x08)},
    { _T("F"),              KBDATA_INFO('F',  0x21, 0, 0x09)},
    { _T("G"),              KBDATA_INFO('G',  0x22, 0, 0x0A)},
    { _T("H"),              KBDATA_INFO('H',  0x23, 0, 0x0B)},
    { _T("I"),              KBDATA_INFO('I',  0x17, 0, 0x0C)},
    { _T("J"),              KBDATA_INFO('J',  0x24, 0, 0x0D)},
    { _T("K"),              KBDATA_INFO('K',  0x25, 0, 0x0E)},
    { _T("L"),              KBDATA_INFO('L',  0x26, 0, 0x0F)},
    { _T("M"),              KBDATA_INFO('M',  0x32, 0, 0x10)},
    { _T("N"),              KBDATA_INFO('N',  0x31, 0, 0x11)},
    { _T("O"),              KBDATA_INFO('O',  0x18, 0, 0x12)},
    { _T("P"),              KBDATA_INFO('P',  0x19, 0, 0x13)},
    { _T("Q"),              KBDATA_INFO('Q',  0x10, 0, 0x14)},
    { _T("R"),              KBDATA_INFO('R',  0x13, 0, 0x15)},
    { _T("S"),              KBDATA_INFO('S',  0x1F, 0, 0x16)},
    { _T("T"),              KBDATA_INFO('T',  0x14, 0, 0x17)},
    { _T("U"),              KBDATA_INFO('U',  0x16, 0, 0x18)},
    { _T("V"),              KBDATA_INFO('V',  0x2F, 0, 0x19)},
    { _T("W"),              KBDATA_INFO('W',  0x11, 0, 0x1A)},
    { _T("X"),              KBDATA_INFO('X',  0x2D, 0, 0x1B)},
    { _T("Y"),              KBDATA_INFO('Y',  0x15, 0, 0x1C)},
    { _T("Z"),              KBDATA_INFO('Z',  0x2C, 0, 0x1D)},
    { _T("Up"),             KBDATA_INFO(0x26, 0x48, 1, 0x52)},
    { _T("Down"),           KBDATA_INFO(0x28, 0x50, 1, 0x51)},
    { _T("Left"),           KBDATA_INFO(0x25, 0x4B, 1, 0x50)},
    { _T("Right"),          KBDATA_INFO(0x27, 0x4D, 1, 0x4F)},
    { _T("Num Up"),         KBDATA_INFO(0x26, 0x48, 0, 0x60)},
    { _T("Num Down"),       KBDATA_INFO(0x28, 0x50, 0, 0x5A)},
    { _T("Num Left"),       KBDATA_INFO(0x25, 0x4B, 0, 0x5C)},
    { _T("Num Right"),      KBDATA_INFO(0x27, 0x4D, 0, 0x5E)},
    { _T("Insert"),         KBDATA_INFO(0x2d, 0x52, 1, 0x49)},
    { _T("Home"),           KBDATA_INFO(0x24, 0x47, 1, 0x4A)},
    { _T("Page Up"),        KBDATA_INFO(0x21, 0x49, 1, 0x4B)},
    { _T("Delete"),         KBDATA_INFO(0x2E, 0x53, 1, 0x4C)},
    { _T("End"),            KBDATA_INFO(0x23, 0x4F, 1, 0x4D)},
    { _T("Page Down"),      KBDATA_INFO(0x22, 0x51, 1, 0x4E)},
    { _T("Print Screen"),   KBDATA_INFO(0x2C, 0x37, 1, 0x46)},
    { _T("Scroll Lock"),    KBDATA_INFO(0x91, 0x46, 0, 0x47)},
    { _T("Num Lock"),       KBDATA_INFO(0x90, 0x45, 1, 0x53)},
    { _T("Caps Lock"),      KBDATA_INFO(0x14, 0x3A, 0, 0x39)},
    { _T("Pause"),          KBDATA_INFO(0x13, 0x45, 1, 0x48)},
    { _T("Num 0"),          KBDATA_INFO(0x60, 0x52, 0, 0x62)},
    { _T("Num 1"),          KBDATA_INFO(0x61, 0x4F, 0, 0x59)},
    { _T("Num 2"),          KBDATA_INFO(0x62, 0x50, 0, 0x5A)},
    { _T("Num 3"),          KBDATA_INFO(0x63, 0x51, 0, 0x5B)},
    { _T("Num 4"),          KBDATA_INFO(0x64, 0x4B, 0, 0x5C)},
    { _T("Num 5"),          KBDATA_INFO(0x65, 0x4C, 0, 0x5D)},
    { _T("Num 6"),          KBDATA_INFO(0x66, 0x4D, 0, 0x5E)},
    { _T("Num 7"),          KBDATA_INFO(0x67, 0x47, 0, 0x5F)},
    { _T("Num 8"),          KBDATA_INFO(0x68, 0x48, 0, 0x60)},
    { _T("Num 9"),          KBDATA_INFO(0x69, 0x49, 0, 0x61)},
    { _T("Num Home"),       KBDATA_INFO(0x24, 0x47, 0, 0x5F)},
    { _T("Num End"),        KBDATA_INFO(0x23, 0x4F, 0, 0x59)},
    { _T("Num Page Up"),    KBDATA_INFO(0x21, 0x49, 0, 0x61)},
    { _T("Num Page Down"),  KBDATA_INFO(0x22, 0x51, 0, 0x5B)},
    { _T("Clear"),          KBDATA_INFO(0x0C, 0x4C, 0, 0x9C)},
    { _T("Num /"),          KBDATA_INFO(0x6f, 0x35, 1, 0x54)},
    { _T("Num *"),          KBDATA_INFO(0x6A, 0x37, 0, 0x55)},
    { _T("Num -"),          KBDATA_INFO(0x6D, 0x4A, 0, 0x56)},
    { _T("Num +"),          KBDATA_INFO(0x6B, 0x4E, 0, 0x57)},
    { _T("Num Enter"),      KBDATA_INFO(0x0D, 0x1C, 1, 0x58)},
    { _T("Num Del"),        KBDATA_INFO(0x2E, 0x53, 0, 0x63)},
    { _T("Num Insert"),     KBDATA_INFO(0x2D, 0x52, 0, 0x62)},
    { _T("Num ."),          KBDATA_INFO(0x6E, 0x53, 0, 0x63)},
};

LPCTSTR GetHidKeyboardName(uint8_t usage_id)
{
    return g_HidKeyInfos[usage_id].lpUsageName;
}

#include <stdint.h>
typedef struct _HID_SCAN_INFO
{
    _tstring HIDUsageName;
    uint8_t nHIDUsagePage;
    uint8_t nHIDUsageID;                       // Usage ID
    uint32_t dwScanMakeCode;
    uint8_t Note;

    _HID_SCAN_INFO(_tstring _name, uint8_t _UsagePage, uint8_t _UsageID, uint32_t _Scan, uint8_t _Note)
        :
        HIDUsageName(_name),
        nHIDUsagePage(_UsagePage),
        nHIDUsageID(_UsageID),
        dwScanMakeCode(_Scan),
        Note(_Note)

    {

    }

}HID_SCAN_INFO;

#define AddHidKeyboardInfo(_name, _UsagePage, _UsageID, _Scan,  _Note)   {_T(_name), HID_SCAN_INFO(_T(_name), _UsagePage, _UsageID, _Scan,  _Note) }

// https://learn.microsoft.com/zh-cn/windows/win32/inputdev/about-keyboard-input
std::map<_tstring, HID_SCAN_INFO> g_HidKeyboard =
{
    AddHidKeyboardInfo("System Power Down                           ", 0x0001, 0x0081, 0xE05E, 0),
    AddHidKeyboardInfo("System Sleep                                ", 0x0001, 0x0082, 0xE05F, 0),
    AddHidKeyboardInfo("System Wake Up                              ", 0x0001, 0x0083, 0xE063, 0),
    AddHidKeyboardInfo("ErrorRollOver                               ", 0x0007, 0x0001, 0x00FF, 0),
    AddHidKeyboardInfo("Keyboard A                                  ", 0x0007, 0x0004, 0x001E, 0),
    AddHidKeyboardInfo("Keyboard B                                  ", 0x0007, 0x0005, 0x0030, 0),
    AddHidKeyboardInfo("Keyboard C                                  ", 0x0007, 0x0006, 0x002E, 0),
    AddHidKeyboardInfo("Keyboard D                                  ", 0x0007, 0x0007, 0x0020, 0),
    AddHidKeyboardInfo("Keyboard E                                  ", 0x0007, 0x0008, 0x0012, 0),
    AddHidKeyboardInfo("Keyboard F                                  ", 0x0007, 0x0009, 0x0021, 0),
    AddHidKeyboardInfo("Keyboard G                                  ", 0x0007, 0x000A, 0x0022, 0),
    AddHidKeyboardInfo("Keyboard H                                  ", 0x0007, 0x000B, 0x0023, 0),
    AddHidKeyboardInfo("Keyboard I                                  ", 0x0007, 0x000C, 0x0017, 0),
    AddHidKeyboardInfo("Keyboard J                                  ", 0x0007, 0x000D, 0x0024, 0),
    AddHidKeyboardInfo("Keyboard K                                  ", 0x0007, 0x000E, 0x0025, 0),
    AddHidKeyboardInfo("Keyboard L                                  ", 0x0007, 0x000F, 0x0026, 0),
    AddHidKeyboardInfo("Keyboard M                                  ", 0x0007, 0x0010, 0x0032, 0),
    AddHidKeyboardInfo("Keyboard N                                  ", 0x0007, 0x0011, 0x0031, 0),
    AddHidKeyboardInfo("Keyboard O                                  ", 0x0007, 0x0012, 0x0018, 0),
    AddHidKeyboardInfo("Keyboard P                                  ", 0x0007, 0x0013, 0x0019, 0),
    AddHidKeyboardInfo("Keyboard Q                                  ", 0x0007, 0x0014, 0x0010, 0),
    AddHidKeyboardInfo("Keyboard R                                  ", 0x0007, 0x0015, 0x0013, 0),
    AddHidKeyboardInfo("Keyboard S                                  ", 0x0007, 0x0016, 0x001F, 0),
    AddHidKeyboardInfo("Keyboard T                                  ", 0x0007, 0x0017, 0x0014, 0),
    AddHidKeyboardInfo("Keyboard U                                  ", 0x0007, 0x0018, 0x0016, 0),
    AddHidKeyboardInfo("Keyboard V                                  ", 0x0007, 0x0019, 0x002F, 0),
    AddHidKeyboardInfo("Keyboard W                                  ", 0x0007, 0x001A, 0x0011, 0),
    AddHidKeyboardInfo("Keyboard X                                  ", 0x0007, 0x001B, 0x002D, 0),
    AddHidKeyboardInfo("Keyboard Y                                  ", 0x0007, 0x001C, 0x0015, 0),
    AddHidKeyboardInfo("Keyboard Z                                  ", 0x0007, 0x001D, 0x002C, 0),
    AddHidKeyboardInfo("Keyboard 1 and Bang                         ", 0x0007, 0x001E, 0x0002, 0),
    AddHidKeyboardInfo("Keyboard 2 and At                           ", 0x0007, 0x001F, 0x0003, 0),
    AddHidKeyboardInfo("Keyboard 3 And Hash                         ", 0x0007, 0x0020, 0x0004, 0),
    AddHidKeyboardInfo("Keyboard 4 and Dollar                       ", 0x0007, 0x0021, 0x0005, 0),
    AddHidKeyboardInfo("Keyboard 5 and Percent                      ", 0x0007, 0x0022, 0x0006, 0),
    AddHidKeyboardInfo("Keyboard 6 and Caret                        ", 0x0007, 0x0023, 0x0007, 0),
    AddHidKeyboardInfo("Keyboard 7 and Ampersand                    ", 0x0007, 0x0024, 0x0008, 0),
    AddHidKeyboardInfo("Keyboard 8 and Star                         ", 0x0007, 0x0025, 0x0009, 0),
    AddHidKeyboardInfo("Keyboard 9 and Left Bracket                 ", 0x0007, 0x0026, 0x000A, 0),
    AddHidKeyboardInfo("Keyboard 0 and Right Bracket                ", 0x0007, 0x0027, 0x000B, 0),
    AddHidKeyboardInfo("Keyboard Return Enter                       ", 0x0007, 0x0028, 0x001C, 0),
    AddHidKeyboardInfo("Keyboard Escape                             ", 0x0007, 0x0029, 0x0001, 0),
    AddHidKeyboardInfo("Keyboard Delete                             ", 0x0007, 0x002A, 0x000E, 0),
    AddHidKeyboardInfo("Keyboard Tab                                ", 0x0007, 0x002B, 0x000F, 0),
    AddHidKeyboardInfo("Keyboard Spacebar                           ", 0x0007, 0x002C, 0x0039, 0),
    AddHidKeyboardInfo("Keyboard Dash and Underscore                ", 0x0007, 0x002D, 0x000C, 0),
    AddHidKeyboardInfo("Keyboard Equals and Plus                    ", 0x0007, 0x002E, 0x000D, 0),
    AddHidKeyboardInfo("Keyboard Left Brace                         ", 0x0007, 0x002F, 0x001A, 0),
    AddHidKeyboardInfo("Keyboard Right Brace                        ", 0x0007, 0x0030, 0x001B, 0),
    AddHidKeyboardInfo("Keyboard Pipe and Slash                     ", 0x0007, 0x0031, 0x002B, 0),
    AddHidKeyboardInfo("Keyboard Non-US                             ", 0x0007, 0x0032, 0x002B, 0),
    AddHidKeyboardInfo("Keyboard SemiColon and Colon                ", 0x0007, 0x0033, 0x0027, 0),
    AddHidKeyboardInfo("Keyboard Apostrophe and Double Quot         ", 0x0007, 0x0034, 0x0028, 0),
    AddHidKeyboardInfo("Keyboard Grave Accent and Tilde             ", 0x0007, 0x0035, 0x0029, 0),
    AddHidKeyboardInfo("Keyboard Comma                              ", 0x0007, 0x0036, 0x0033, 0),
    AddHidKeyboardInfo("Keyboard Period                             ", 0x0007, 0x0037, 0x0034, 0),
    AddHidKeyboardInfo("Keyboard QuestionMark                       ", 0x0007, 0x0038, 0x0035, 0),
    AddHidKeyboardInfo("Keyboard Caps Lock                          ", 0x0007, 0x0039, 0x003A, 0),
    AddHidKeyboardInfo("Keyboard F1                                 ", 0x0007, 0x003A, 0x003B, 0),
    AddHidKeyboardInfo("Keyboard F2                                 ", 0x0007, 0x003B, 0x003C, 0),
    AddHidKeyboardInfo("Keyboard F3                                 ", 0x0007, 0x003C, 0x003D, 0),
    AddHidKeyboardInfo("Keyboard F4                                 ", 0x0007, 0x003D, 0x003E, 0),
    AddHidKeyboardInfo("Keyboard F5                                 ", 0x0007, 0x003E, 0x003F, 0),
    AddHidKeyboardInfo("Keyboard F6                                 ", 0x0007, 0x003F, 0x0040, 0),
    AddHidKeyboardInfo("Keyboard F7                                 ", 0x0007, 0x0040, 0x0041, 0),
    AddHidKeyboardInfo("Keyboard F8                                 ", 0x0007, 0x0041, 0x0042, 0),
    AddHidKeyboardInfo("Keyboard F9                                 ", 0x0007, 0x0042, 0x0043, 0),
    AddHidKeyboardInfo("Keyboard F10                                ", 0x0007, 0x0043, 0x0044, 0),
    AddHidKeyboardInfo("Keyboard F11                                ", 0x0007, 0x0044, 0x0057, 0),
    AddHidKeyboardInfo("Keyboard F12                                ", 0x0007, 0x0045, 0x0058, 0),
    AddHidKeyboardInfo("Keyboard PrintScreen                        ", 0x0007, 0x0046, 0xE037, 0),
    AddHidKeyboardInfo("Keyboard Scroll Lock                        ", 0x0007, 0x0047, 0x0046, 0),  
    AddHidKeyboardInfo("Keyboard Pause                              ", 0x0007, 0x0048, 0xE11D, 0),
    AddHidKeyboardInfo("Keyboard Insert                             ", 0x0007, 0x0049, 0xE052, 0),
    AddHidKeyboardInfo("Keyboard Home                               ", 0x0007, 0x004A, 0xE047, 0),
    AddHidKeyboardInfo("Keyboard PageUp                             ", 0x0007, 0x004B, 0xE049, 0),
    AddHidKeyboardInfo("Keyboard Delete Forward                     ", 0x0007, 0x004C, 0xE053, 0),
    AddHidKeyboardInfo("Keyboard End                                ", 0x0007, 0x004D, 0xE04F, 0),
    AddHidKeyboardInfo("Keyboard PageDown                           ", 0x0007, 0x004E, 0xE051, 0),
    AddHidKeyboardInfo("Keyboard RightArrow                         ", 0x0007, 0x004F, 0xE04D, 0),
    AddHidKeyboardInfo("Keyboard LeftArrow                          ", 0x0007, 0x0050, 0xE04B, 0),
    AddHidKeyboardInfo("Keyboard DownArrow                          ", 0x0007, 0x0051, 0xE050, 0),
    AddHidKeyboardInfo("Keyboard UpArrow                            ", 0x0007, 0x0052, 0xE048, 0),
    AddHidKeyboardInfo("Keypad Num Lock and Clear                   ", 0x0007, 0x0053, 0x0045, 0),
    AddHidKeyboardInfo("Keypad Forward Slash                        ", 0x0007, 0x0054, 0xE035, 0),
    AddHidKeyboardInfo("Keypad Star                                 ", 0x0007, 0x0055, 0x0037, 0),
    AddHidKeyboardInfo("Keypad Dash                                 ", 0x0007, 0x0056, 0x004A, 0),
    AddHidKeyboardInfo("Keypad Plus                                 ", 0x0007, 0x0057, 0x004E, 0),
    AddHidKeyboardInfo("Keypad ENTER                                ", 0x0007, 0x0058, 0xE01C, 0),
    AddHidKeyboardInfo("Keypad 1 and End                            ", 0x0007, 0x0059, 0x004F, 0),
    AddHidKeyboardInfo("Keypad 2 and Down Arrow                     ", 0x0007, 0x005A, 0x0050, 0),
    AddHidKeyboardInfo("Keypad 3 and PageDn                         ", 0x0007, 0x005B, 0x0051, 0),
    AddHidKeyboardInfo("Keypad 4 and Left Arrow                     ", 0x0007, 0x005C, 0x004B, 0),
    AddHidKeyboardInfo("Keypad 5                                    ", 0x0007, 0x005D, 0x004C, 0),
    AddHidKeyboardInfo("Keypad 6 and Right Arrow                    ", 0x0007, 0x005E, 0x004D, 0),
    AddHidKeyboardInfo("Keypad 7 and Home                           ", 0x0007, 0x005F, 0x0047, 0),
    AddHidKeyboardInfo("Keypad 8 and Up Arrow                       ", 0x0007, 0x0060, 0x0048, 0),
    AddHidKeyboardInfo("Keypad 9 and PageUp                         ", 0x0007, 0x0061, 0x0049, 0),
    AddHidKeyboardInfo("Keypad 0 and Insert                         ", 0x0007, 0x0062, 0x0052, 0),
    AddHidKeyboardInfo("Keypad Period                               ", 0x0007, 0x0063, 0x0053, 0),
    AddHidKeyboardInfo("Keyboard Non-US Slash Bar                   ", 0x0007, 0x0064, 0x0056, 0),
    AddHidKeyboardInfo("Keyboard Application                        ", 0x0007, 0x0065, 0xE05D, 0),
    AddHidKeyboardInfo("Keyboard Power                              ", 0x0007, 0x0066, 0xE05E, 0),
    AddHidKeyboardInfo("Keypad Equals                               ", 0x0007, 0x0067, 0x0059, 0),
    AddHidKeyboardInfo("Keyboard F13                                ", 0x0007, 0x0068, 0x0064, 0),
    AddHidKeyboardInfo("Keyboard F14                                ", 0x0007, 0x0069, 0x0065, 0),
    AddHidKeyboardInfo("Keyboard F15                                ", 0x0007, 0x006A, 0x0066, 0),
    AddHidKeyboardInfo("Keyboard F16                                ", 0x0007, 0x006B, 0x0067, 0),
    AddHidKeyboardInfo("Keyboard F17                                ", 0x0007, 0x006C, 0x0068, 0),
    AddHidKeyboardInfo("Keyboard F18                                ", 0x0007, 0x006D, 0x0069, 0),
    AddHidKeyboardInfo("Keyboard F19                                ", 0x0007, 0x006E, 0x006A, 0),
    AddHidKeyboardInfo("Keyboard F20                                ", 0x0007, 0x006F, 0x006B, 0),
    AddHidKeyboardInfo("Keyboard F21                                ", 0x0007, 0x0070, 0x006C, 0),
    AddHidKeyboardInfo("Keyboard F22                                ", 0x0007, 0x0071, 0x006D, 0),
    AddHidKeyboardInfo("Keyboard F23                                ", 0x0007, 0x0072, 0x006E, 0),
    AddHidKeyboardInfo("Keyboard F24                                ", 0x0007, 0x0073, 0x0076, 0),
    AddHidKeyboardInfo("Keypad Comma                                ", 0x0007, 0x0085, 0x007E, 0),
    AddHidKeyboardInfo("Keyboard International1                     ", 0x0007, 0x0087, 0x0073, 0),
    AddHidKeyboardInfo("Keyboard International2                     ", 0x0007, 0x0088, 0x0070, 0),
    AddHidKeyboardInfo("Keyboard International3                     ", 0x0007, 0x0089, 0x007D, 0),
    AddHidKeyboardInfo("Keyboard International4                     ", 0x0007, 0x008A, 0x0079, 0),
    AddHidKeyboardInfo("Keyboard International5                     ", 0x0007, 0x008B, 0x007B, 0),
    AddHidKeyboardInfo("Keyboard International6                     ", 0x0007, 0x008C, 0x005C, 0),
    AddHidKeyboardInfo("Keyboard LANG1                              ", 0x0007, 0x0090, 0x0072, 0),
    AddHidKeyboardInfo("Keyboard LANG2                              ", 0x0007, 0x0091, 0x0071, 0),
    AddHidKeyboardInfo("Keyboard LANG3                              ", 0x0007, 0x0092, 0x0078, 0),
    AddHidKeyboardInfo("Keyboard LANG4                              ", 0x0007, 0x0093, 0x0077, 0),
    AddHidKeyboardInfo("Keyboard LANG5                              ", 0x0007, 0x0094, 0x0076, 0),
    AddHidKeyboardInfo("Keyboard LeftControl                        ", 0x0007, 0x00E0, 0x001D, 0),
    AddHidKeyboardInfo("Keyboard LeftShift                          ", 0x0007, 0x00E1, 0x002A, 0),
    AddHidKeyboardInfo("Keyboard LeftAlt                            ", 0x0007, 0x00E2, 0x0038, 0),
    AddHidKeyboardInfo("Keyboard Left GUI                           ", 0x0007, 0x00E3, 0xE05B, 0),
    AddHidKeyboardInfo("Keyboard RightControl                       ", 0x0007, 0x00E4, 0xE01D, 0),
    AddHidKeyboardInfo("Keyboard RightShift                         ", 0x0007, 0x00E5, 0x0036, 0),
    AddHidKeyboardInfo("Keyboard RightAlt                           ", 0x0007, 0x00E6, 0xE038, 0),
    AddHidKeyboardInfo("Keyboard Right GUI                          ", 0x0007, 0x00E7, 0xE05C, 0),
    AddHidKeyboardInfo("Scan Next Track                             ", 0x000C, 0x00B5, 0xE019, 0),
    AddHidKeyboardInfo("Scan Previous Track                         ", 0x000C, 0x00B6, 0xE010, 0),
    AddHidKeyboardInfo("Stop                                        ", 0x000C, 0x00B7, 0xE024, 0),
    AddHidKeyboardInfo("Play/Pause                                  ", 0x000C, 0x00CD, 0xE022, 0),
    AddHidKeyboardInfo("Mute                                        ", 0x000C, 0x00E2, 0xE020, 0),
    AddHidKeyboardInfo("Volume Increment                            ", 0x000C, 0x00E9, 0xE030, 0),
    AddHidKeyboardInfo("Volume Decrement                            ", 0x000C, 0x00EA, 0xE02E, 0),
    AddHidKeyboardInfo("AL Consumer Control Configuration           ", 0x000C, 0x0183, 0xE06D, 0),
    AddHidKeyboardInfo("AL Email Reader                             ", 0x000C, 0x018A, 0xE06C, 0),
    AddHidKeyboardInfo("AL Calculator                               ", 0x000C, 0x0192, 0xE021, 0),
    AddHidKeyboardInfo("AL Local Machine Browser                    ", 0x000C, 0x0194, 0xE06B, 0),
    AddHidKeyboardInfo("AC Search                                   ", 0x000C, 0x0221, 0xE065, 0),
    AddHidKeyboardInfo("AC Home                                     ", 0x000C, 0x0223, 0xE032, 0),
    AddHidKeyboardInfo("AC Back                                     ", 0x000C, 0x0224, 0xE06A, 0),
    AddHidKeyboardInfo("AC Forward                                  ", 0x000C, 0x0225, 0xE069, 0),
    AddHidKeyboardInfo("AC Stop                                     ", 0x000C, 0x0226, 0xE068, 0),
    AddHidKeyboardInfo("AC Refresh                                  ", 0x000C, 0x0227, 0xE067, 0),
    AddHidKeyboardInfo("AC Bookmarks                                ", 0x000C, 0x022A, 0xE066, 0),
};
